package com.sfh;

import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.render.ViewType;
import com.jfinal.template.Engine;
import com.jfinal.upload.OreillyCos;
import com.sfh.base.UpFileRenamePolicy;
import com.sfh.base.util.JsonGsonFactory;
import com.sfh.controller.MassController;
import com.sfh.controller.NoteController;
import com.sfh.controller.SysController;
import com.sfh.controller.UserController;
import com.sfh.service.model.FileResModel;
import com.sfh.service.model.IdsModel;
import com.sfh.service.model.MassModel;
import com.sfh.service.model.MessageModel;
import com.sfh.service.model.NoteModel;
import com.sfh.service.model.UserModel;
import com.sfh.service.model.VIPCodeModel;
import com.sfh.service.model.table.FileTable;
import com.sfh.service.model.table.IdsTable;
import com.sfh.service.model.table.MassTable;
import com.sfh.service.model.table.MessageTable;
import com.sfh.service.model.table.NoteTable;
import com.sfh.service.model.table.UserTable;
import com.sfh.service.model.table.VIPCodeTable;

public class MainConfig extends JFinalConfig {

	@Override
	public void onStart() {
		super.onStart();
		// 上传文件重名策略的使用
		OreillyCos.setFileRenamePolicy(new UpFileRenamePolicy());
	}

	/**
	 * 配置JFinal常量
	 */
	@Override
	public void configConstant(Constants me) {
		// 读取数据库配置文件
		PropKit.use("config.properties");
		// 设置当前是否为开发模式
		me.setDevMode(PropKit.getBoolean("devMode"));
		// 设置默认上传文件保存路径 getFile等使用
		me.setBaseUploadPath("/www/server/apache-tomcat-8.5.32/webapps/CPMASS/upload");
		// 设置上传最大限制尺寸
		 me.setMaxPostSize(1024*1024*10);
		// 设置默认视图类型
		me.setViewType(ViewType.JFINAL_TEMPLATE);
		// 设置json工厂
		me.setJsonFactory(JsonGsonFactory.me());
	}

	/**
	 * 配置JFinal路由映射
	 */
	@Override
	public void configRoute(Routes me) {

		me.add("/user", UserController.class);
		me.add("/note", NoteController.class);
		me.add("/mass", MassController.class);
		me.add("/sys", SysController.class);
	}

	/**
	 * 配置JFinal插件 数据库连接池 ORM 缓存等插件 自定义插件
	 */
	@Override
	public void configPlugin(Plugins me) {

		// 配置数据库连接池插件
		DruidPlugin dbPlugin = new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password"));
		// orm映射 配置ActiveRecord插件
		ActiveRecordPlugin arp = new ActiveRecordPlugin(dbPlugin);
		arp.setShowSql(PropKit.getBoolean("devMode"));
		arp.setDialect(new MysqlDialect());
		/******** 在此添加数据库 表-Model 映射 *********/
		arp.addMapping(IdsTable.Table.toString(), IdsModel.class);
		arp.addMapping(FileTable.Table.toString(), FileTable.id.toString(), FileResModel.class);
		arp.addMapping(UserTable.Table.toString(), UserTable.id.toString(), UserModel.class);
		arp.addMapping(MessageTable.Table.toString(), MessageTable.id.toString(), MessageModel.class);
		arp.addMapping(NoteTable.Table.toString(), NoteTable.id.toString(), NoteModel.class);
		arp.addMapping(MassTable.Table.toString(), MassTable.id.toString(), MassModel.class);
		arp.addMapping(VIPCodeTable.Table.toString(), VIPCodeTable.id.toString(), VIPCodeModel.class);

		// 添加到插件列表中
		me.add(dbPlugin);
		me.add(arp);

	}

	/**
	 * 配置全局拦截器
	 */
	@Override
	public void configInterceptor(Interceptors me) {

	}

	/**
	 * 配置全局处理器
	 */
	@Override
	public void configHandler(Handlers me) {

	}

	/**
	 * 配置模板引擎
	 */
	@Override
	public void configEngine(Engine me) {
		// 这里只有选择JFinal TPL的时候才用
		// 配置共享函数模板
		// me.addSharedFunction("/view/common/layout.html")
	}

	public static void main(String[] args) {
		JFinal.start("WebRoot", 8080, "/", 5);
	}

}
